// 输出什么
function Foo() {
  Foo.a = function() {
      console.log(1)
  }
  this.a = function() {
      console.log(2)
  }
}
Foo.prototype.a = function() {
  console.log(3)
}
Foo.a = function() {
  console.log(4)
}
Foo.a();
let obj = new Foo();
obj.a();
Foo.a();

/**
 * output
 * 4
 * 2
 * 1
 * */ 

/**
 * why
 * 函数 Foo, 一开始只是构建了，并没有产生实例，也没有执行
 * Foo.prototype.a  是挂载在 Foo 原型上的函数
 * Foo.a 是个静态方法，执行 Foo.a() 时，直接打印 
 * 4
 * let obj = new Foo()， 函数Foo 执行了，也生成实例
 * 因此，原先的原型链上的函数a ，以及静态方法a 被重置了，
 * 所以，后两个输出
 * 2
 * 1
 * */ 